// console.log(1231);
// if (1) {
//   var a = 123
//   let d = 321
//   console.log(d);
// }
// console.log(a);



// 解构

// const [a,b,v] = [1,2,3]
// console.log(a,b,v); 1 2 3

// const [a,,b] = [1,2,3]
// console.log(a,b); 1 3

// const [a,...b] = [1,2,3]
// console.log(a,b); 1 [2,3]

// const [a,,b] = [1,2]
// console.log(b); undefind

// const [a,,b = 4] = [1,2]
// console.log(b); 4


// 剩余参数

// function fn (...arguments){
//   console.log(arguments)  // [1,2,3]
// }


// const sun = n => n - 1


// require('./copy/index.js')
// function Car () {
//   this.name = 'ttq'
// }

// const a = new Car()
// a.b = 123
// console.log(a.name)

// console.log(
//   Object.getOwnPropertyDescriptor(a, 'name'))
// console.log(
//   Object.getOwnPropertyDescriptors(a))


// console.log(Promise);

// const promise = new Promise((resolve,reject)=>{
//   resolve(111)
// })

// let p1 =promise.then(res=>{
//   console.log(res);
//   return p1
// })

// function add (num1, num2) {
//   const num1Digits = num1.toString().split('.')[1].length
//   const num2Digits = num2.toString().split('.')[1].length
//   const baseNum = Math.pow(10, Math.max(num1Digits, num2Digits))
//   return (num1 * baseNum + num2 * baseNum) / baseNum
// }
// add(0.1, 0.2)

// /**
//  * 
//  */

// function getType (params) {
//   if (typeof params !== 'object') return typeof params
//   return Object.prototype.toString.call(params).replace(/^\[object (\S+)\]/, '$1')
// }

// let a = getType(BigInt(100000000000000000))
// console.log(a)

// function deepClone (params) {
//   // 如果是值类型直接返回
//   if (typeof params !== 'object') return params

// }

// function _instanceof (a, b) {
//   let A = a.__proto__
//   B = b.prototype
//   while (1) {
//     if (A === null) return
//     if (A === B) return true
//     A = A.__proto__
//   }
// }
// function fn() {
//     console.log(this);
//     console.log(Array.from(arguments));
// }
// console.log(this, 123);

// Function.prototype.bind1 = function () {
//     const args = Array.from(arguments)
//     const _this = args.shift()
//     const slef = this
//     return function () {
//         slef.apply(_this, args)
//     }
// }


// fn2 = fn.bind1({ a: 123 }, 13, 14, 15)
// fn2(123, 123)

// Function.prototype.myApply = function () {

//     let args = Array.from(argements)
//     let _this = args.shift()
//     if (typeof _this === 'underfind' || _this === null) {
//         _this = window
//     }
//     _this.fn = this
//     let res
//     if (args.length) {
//         res = _this.fn(...args)
//     } else {
//         res = _this.fn()
//     }
//     return res
// }

// fn.call({ttq:3}, 123)

// async function fn (){
//     return 100
// }

// (async function (){
//     const a1  = fn()
//     const a2 = await fn()

//     console.log(a1);
//     console.log(a2);
// })()

async function async1(params) {
    console.log('async1 start');
    await async2()
    console.log('async1 end');

}

async function async2(params) {
    console.log('async2');
}

console.log('script start');
setTimeout(function name(params) {
    console.log('setTimeout');
},0)
async1()
new Promise(function (resolve) {
    console.log('promise1');
    resolve()
}).then(function (params) {
    console.log('pormise2');
})
console.log('script end');
